package Data;

import Model.MidiaBean;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Vector;

public class MidiaDAO extends Conexao {

    public Vector listarMidia(String nome) throws SQLException {
        NumberFormat moneyFormat = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));

        //Declaro a consulta
        String sql = "select * from midia where inativo = 'F'";

        //Crio um vector para os dadso
        Vector dados = new Vector();

        //se tiver algum nome pra pesquisar modifico a consulta
        if (nome != null && !nome.isEmpty()) {
            sql += " and midiadesc like '%" + nome + "%'";
        }

        //Pego uma conexao com o banco
        Connection conn = getConexao();

        //Preparo a consulta
        PreparedStatement ps = conn.prepareStatement(sql);

        //Executo a consulta
        ResultSet rs = ps.executeQuery();

        //Percorre todas as linhas de resultado da query
        while (rs.next()) {
            Vector linha = new Vector();

            //Preenche o vector com as informações
            linha.add(rs.getInt(1));
            linha.add(rs.getString(2));
            linha.add(moneyFormat.format(rs.getFloat(3)));

            //Adiciona o cliente no array
            dados.add(linha);
        }

        //Fecho o PreparedStatment
        ps.close();

        //Retorno os midias encontrados
        return dados;

    }

    public List listarMidiaAsList(String nome) throws SQLException {
        NumberFormat moneyFormat = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));

        //Declaro a consulta
        String sql = "select * from midia where inativo = 'F'";

        //Crio um Array para os dadso
        List<MidiaBean> midias = new ArrayList<>();

        //se tiver algum nome pra pesquisar modifico a consulta
        if (nome != null && !nome.isEmpty()) {
            sql += " and midiadesc like '%" + nome + "%'";
        }

        //Pego uma conexao com o banco
        Connection conn = getConexao();

        //Preparo a consulta
        PreparedStatement ps = conn.prepareStatement(sql);

        //Executo a consulta
        ResultSet rs = ps.executeQuery();

        //Percorre todas as linhas de resultado da query
        while (rs.next()) {
            MidiaBean midia = new MidiaBean();

            //Preenche o vector com as informações
            midia.setCodigo(rs.getInt(1));
            midia.setDescricao(rs.getString(2));
            midia.setValor(rs.getFloat(3));

            //Adiciona o cliente no array
            midias.add(midia);
        }

        //Fecho o PreparedStatment
        ps.close();

        //Retorno os midias encontrados
        return midias;

    }

    public MidiaBean getMidia(int id) throws SQLException {
        //Validação do ID
        if (id < 1) {
            return null;
        }

        //Declaro a consulta
        String sql = "select * from midia where inativo = 'F' and midiacod = ?";

        //Declaro o objeto de retorno
        MidiaBean midia = null;

        //Pego uma conexao com o banco
        Connection conn = getConexao();

        //Preparo a consulta
        PreparedStatement ps = conn.prepareStatement(sql);

        //Coloco os parametros na consulta
        ps.setObject(1, id);

        //Executo a consulta
        ResultSet rs = ps.executeQuery();

        //Se tiver algum resultado
        if (rs.next()) {
            midia = new MidiaBean();

            //Preenche o midia com as informações
            midia.setCodigo(rs.getInt(1));
            midia.setDescricao(rs.getString(2));
            midia.setValor(rs.getFloat(3));
        }

        //Fecho o PreparedStatment
        ps.close();

        //Retorno a midia
        return midia;

    }

    public boolean alterarMidia(MidiaBean midia) throws SQLException {
        if (midia == null) {
            return false;
        }

        //Declaro a query
        String sql = "UPDATE MIDIA SET MIDIADESC = ?, MIDIAVALOR = ? WHERE MIDIACOD = ?";

        //Pego uma conexao com o banco
        Connection conn = getConexao();

        //Preparo a consulta
        PreparedStatement ps = conn.prepareStatement(sql);

        //Colocando os parametros na consulta
        ps.setObject(1, midia.getDescricao());
        ps.setObject(2, midia.getValor());
        ps.setObject(3, midia.getCodigo());

        //Executo a consulta
        int resultado = ps.executeUpdate();

        //verifico se deu tudo certo
        if (resultado >= 1) {
            return true;
        } else {
            return false;
        }
    }

    public MidiaBean getMidia(String nome) throws SQLException {
        //Validação do nome
        if (nome == null || nome.isEmpty()) {
            return null;
        }

        //Declaração da Query
        String sql = "select * from midia where inativo = 'F' and midiadesc like '%?%'";

        //Declaro o objeto de retorno
        MidiaBean midia = null;

        //Pego uma conexao com o banco
        Connection conn = getConexao();

        //Preparo a consulta
        PreparedStatement ps = conn.prepareStatement(sql);

        //Coloco os parametros na consulta
        ps.setObject(1, nome);

        //Executo a consulta
        ResultSet rs = ps.executeQuery();

        //Se tiver algum resultado
        if (rs.next()) {
            midia = new MidiaBean();

            //Preenche o midia com as informações
            midia.setCodigo(rs.getInt(1));
            midia.setDescricao(rs.getString(2));
            midia.setValor(rs.getFloat(3));
        }

        //Fecho o PreparedStatment
        ps.close();

        //Retorno os midias encontrados
        return midia;

    }

    public boolean cadastrarMidia(MidiaBean midia) throws SQLException {

        //Validação do objeto
        if (midia == null) {
            return false;
        }

        //Declaro a query
        String sql = "insert into midia values (?,?,?)";

        //Pego uma conexao com o banco
        Connection conn = getConexao();

        //Preparo a consulta
        PreparedStatement ps = conn.prepareStatement(sql);

        //Colocando os parametros na consulta
        ps.setObject(1, midia.getDescricao());
        ps.setObject(2, midia.getValor());
        ps.setObject(3, "F");

        //Executo a consulta
        int resultado = ps.executeUpdate();

        //verifico se deu tudo certo
        if (resultado >= 1) {
            return true;
        } else {
            return false;
        }


    }

    public boolean deletarMidia(int id) throws SQLException {
        //Validação do ID
        if (id < 1) {
            return false;
        }

        //Declaro a query
        String sql = "update midia set inativo = 'T' where midiacod = ?";

        //Pego uma conexao com o banco
        Connection conn = getConexao();

        //Preparo a consulta
        PreparedStatement ps = conn.prepareStatement(sql);

        //Coloco os parametros na consulta
        ps.setObject(1, id);

        //Executo a consulta
        int resultado = ps.executeUpdate();

        //verifico se deu tudo certo
        if (resultado >= 1) {
            return true;
        } else {
            return false;
        }


    }

    public boolean deletarMidia(MidiaBean midia) throws SQLException {
        if (midia != null && midia.getCodigo() > 0) {
            return deletarMidia(midia.getCodigo());
        } else {
            return false;
        }
    }
}
